tenable.ioでWebアプリケーションスキャンをやってみた
こんにちは、坂巻です。
SaaSで利用できる脆弱性診断サービスのtenable.ioについてのエントリです。
tenable.ioでは主に脆弱性管理、Webアプリケーションスキャン、コンテナセキュリティ機能があります。今回は、Webアプリケーションの脆弱性を確認できる、Webアプリケーションスキャンを実施してみたいと思います。
構成
スキャン対象の構成は以下となります。
Rout53で名前解決、ACMでSSL証明書を取得し、ALBでターミネーションしています。アプリケーションはALB配下のEC2(Docker上)で起動しています。Webアプリケーションスキャン(Web App Scanテンプレート)を使用するため、tenable側のスキャナを利用しています。AWS事前承認済みスキャナ(Pre-Authorized Sanner)は利用できず、スキャンを実施する際は、侵入テスト申請が必要になりますのでご注意ください。
前提
- AWSへの侵入テスト申請が承認されていること
- スキャン対象のWebアプリケーションが利用可能であること
- 本エントリと同様の検証を行いたい場合は、こちらのブログを参考に環境を構築してください。使用しているイメージはvulnerables/web-dvwaとなります。
- tenableからWebアプリケーションにアクセスできること
- tenableのスキャナより、スキャン対象のアプリケーション(ここではALB)にアクセスできる必要があります。アクセス元のIPをAbout Scannersより確認し、セキュリティグループのインバウンド設定に追加してください。
- tenable.ioアカウントが取得済みであること
- 取得していない場合はこちらよりトライアルアカウントの作成が可能です。トライアルアカウントはtenable.ioの全ての機能が利用できます。
やってみた
事前設定(Seleniumスクリプト(.side)作成)
スキャナからWebアプリケーションを認証させるのに「Selenium Authentication」を使用してみます。後ほど説明しますが、こちらはtenableスキャン作成時の設定となります。設定の際にSeleniumスクリプト(.side)が必要になりますので、Chromeの拡張機能を使い「.side」を作成します。 chrome web storeより、Selenium IDEを追加します。
「拡張機能を追加」をクリックします。
Selenium IDE拡張機能を起動します。
「Record a new test in a new project」をクリックします。
任意の「PROJECT NAME」を入力し「OK」をクリックします。
「BASE URL」にスキャン対象のURLを入力し「Start Recording」をクリックします。
入力したURLが開きレコーディングが開始されるので、フォームに認証情報を入力しログインします。
ログインの成功を確認します。今回利用しているアプリケーションの場合、ログインに成功すると以下のような画面が出力されます。
レコーティングを停止します。
任意の「TEST NAME」を入力し「OK」をクリックします。
「Save Project」をクリックし、Seleniumスクリプト(.side)を任意の場所に保存します。
スキャンテンプレート選択
tenableのコンソールにログインし「Scans」をクリックします。
「New Scans」をクリックします。
「Web Application」をクリックします。
「Web App Scan」をクリックします。
スキャン設定
General
「Settings」タブより「Basic」-「General」をクリックし、以下を設定します。
- Name…作成するスキャン名
- Description…作成するスキャンの説明
- Folder…スキャン結果を保存するフォルダ
- Scanner…スキャンを実施するスキャナ
- AWS事前承認済みスキャナ(Pre-Authorized Sanner)は使用できません
- Target…スキャン対象のURL
Notifications
こちらの設定は任意となりますが、スキャン完了時にメール通知が必要な場合に設定します。複数の宛先に通知を行う場合は「,」で区切って設定します。
ASSESSMENT
今回「Scan Type」は「Quick」としましたが、詳細な診断を行う場合は「Extensive」を選択します。
Credentials
スキャン対象Webアプリケーションの認証情報を設定します。「Web App Scan」テンプレートには、2つの認証方法があります。
- HTTP Server Authentication
- Web Application Authentication
サーバーに対して認証を行う「HTTP Server Authentication」と、アプリケーションに対して認証を行う「Web Application Authentication」があります。今回はアプリケーションに対して認証を行う「Web Application Authentication」を選択します。
次は「Web Application Authentication」の設定になります。「Authentication Method」には、以下3つの認証方法がります。
- Login Form
- Cookie Authentication
- Selenium Authentication
ログインフォームの情報を設定し認証を行う「Login Form」と、セッションに対して認証を行う「Cookie Authentication」と、Seleniumスクリプト(.side)を使用する「Selenium Authentication」があります。
今回は「Selenium Authentication」を選択し、準備しておいた.sideファイルを指定します。その他設定は以下となりますので、入力後「Save to Managed Credentials」をクリックします。
- Page to verify active session…認証されたセッションで継続的にアクセスできるURLを入力
- Regex to verify active session…ページに表示される単語(正規表現可)を入力
任意の「Credential Name」を入力し「Save」をクリックします。
「Save」をクリックします。
スキャン実施
作成したスキャンを選択し「Launch」をクリックします。
スキャンが完了するまで待機となります。私が実施した環境では、約1時間程度かかりました。Notificationsの設定を行っていたので、スキャンが完了するとメール通知が行われました。
スキャン結果
Assets
スキャンしたドメインで検出された脆弱性が表示されています。
Notes
スキャン中に発生した事象が表示されています。
Vulnerabilities
検出された脆弱性が一覧表示されています。ここでは「Operating System Command Injection」をクリックして内容を確認してみたいと思います。
脆弱性の説明、解決策、参照ページなど詳細が表示されました。
「URLs」をクリックすると、リクエストやレスポンスなどについて、詳細が確認することができます。出力内容が多かったため画面を抜粋しましたが、どのURLに何のデータを送信したのか確認できました。
HTTPリクエストとHTTPレスポンスの内容が添付されていました。
結果に詳細が記載されていたので、Webアプリケーションに対し、表示されていたコマンド; /bin/cat /etc/passwd ;
を送信してみました。
おっと...。想定通りですが、コマンドが実行され、結果が取得できてしまいました。
今回は外部のアプリを利用しているため、脆弱性に対する対応は行いませんが、Solution等を確認していくことで、脆弱性への対応ができるのではないでしょうか。
さいごに
スキャンの作成など、tenable側は数ステップの設定で、Webアプリケーションスキャンが実施できました。アプリケーションに潜むリスクの可視化にWebアプリケーションスキャンを利用してみてはいかがでしょうか。
脆弱性管理、コンテナセキュリティ等、tenableでは他の機能もありますので、以下も確認してみてください!